#ifndef Ubicador_H
#define Ubicador_H

#include <stddef.h>
#include <stdbool.h>
#include <stdio.h>
#include "lista.h"
#include "vector_dinamico.h"

/* *****************************************************************
 *                DEFINICION DE LOS TIPOS DE DATOS
 * *****************************************************************/

/* Estructura diseñada para almacenar el archivo (identificado con un número)
 * y todas las posiciones donde se encontraría cierta palabra
 * o frase parseada. Las posiciones son identificadas con el número de
 * palabra correspondiente dentro del archivo. */
typedef struct _Ubicador Ubicador_t;

/* *****************************************************************
 *                    PRIMITIVAS DEL UBICADOR
 * *****************************************************************/

/* Crea y devuelve un Ubicador. 'posicion' y 'numeroArchivo' deben ser
 * positivos. En caso de error, devuelve NULL */
Ubicador_t* Ubicador_crear (int posicion, int numeroArchivo);

/* Agrega el número de la palabra o frase parseada al ubicador y devuelve
 * true. El resultado es false en caso de error */
bool Ubicador_agregarPosicion (Ubicador_t* ubicador, int numeroPalabra);

/* Borra el número de la palabra o frase parseada del ubicador */
void Ubicador_borrarPosicion (Ubicador_t* ubicador, int numeroPalabra);

/* Devuelve la lista de posiciones de la palabra o frase parseada o NULL
 * en caso de error.
 * IMPORTANTE: La lista NO debe ser destruida. */
lista_t* Ubicador_verPosiciones (Ubicador_t* ubicador);

/* Devuelve el número del archivo donde se encuentra la palabra o
 * frase parseada o -1 en caso de error */
int Ubicador_verArchivo (Ubicador_t* ubicador);

void Ubicador_imprimir (Ubicador_t* ubicador);

/* Devuelve un vector dinámico con int* correspondientes a las posiciones
 * en los que aparece el término representado en DISTANCIAS */
vector_dinamico_t* Ubicador_verPosicionesEnVector (Ubicador_t* ub);

/* Destruye el ubicador pasado por parámetro */
void Ubicador_destruir (Ubicador_t* ubicador);

#endif //  Ubicador_H
